package com.zhiyume.service.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 *
 * @description 日志敏感词过滤
 * @author luzh3
 * @mail luzh3@zhiyume.com
 * @date 2015年12月23日
 */
public class LogSecurityUtil {
	
	private final static String REPLACE_VALUE = "******";
	private final static String[] SECURITY_KEYS = {
			"password", 
			"passwd",
			"passWd",
			"PASSWORD",
			"passWord"};
	

	/**
	 * 默认替换密码字符串
	 * 由于可能存在性能问题，需要判断该字符串是否包含敏感词
	 * @param jsonStr
	 * @return
	 */
	public static String filter(String jsonStr) {
		return filterKeys(jsonStr, SECURITY_KEYS, REPLACE_VALUE);
	}
	
	/**
	 * 默认替换密码字符串
	 * @param jsonStr
	 * @param replaceValue
	 * @return
	 */
	public static String filter(String jsonStr, String replaceValue) {
		return filterKeys(jsonStr, null, replaceValue);
	}
	
	/**
	 * 替换key对应的value
	 * @param jsonStr
	 * @param key
	 * @param replaceValue
	 * @return
	 */
	public static String filterKey(String jsonStr, String key, String replaceValue) {
		if (StringUtil.isBlank(key)) {
			return jsonStr;
		}
		JSONObject jsonObj = JSON.parseObject(jsonStr);
		if (StringUtil.isNotBlank(jsonObj.getString(key))) {
			jsonObj.put(key, replaceValue);
		}
		return jsonObj.toJSONString();
	}
	
	/**
	 * 替换keys对应的value
	 * @param jsonStr
	 * @param keys
	 * @param replaceValue
	 * @return
	 */
	public static String filterKeys(String jsonStr, String[] keys, String replaceValue) {
		if (null == keys) {
			keys = SECURITY_KEYS;
		}
		JSONObject jsonObj = JSON.parseObject(jsonStr);
		for (String key : keys) {
			if (StringUtil.isNotBlank(jsonObj.getString(key))) {
				jsonObj.put(key, replaceValue);
			}
		}
		return jsonObj.toJSONString();
	}
	
	/**
	 * 替换key对应的value，替换值默认为******
	 * @param jsonStr
	 * @param key
	 * @return
	 */
	public static String filterKey(String jsonStr, String key) {
		return filterKey(jsonStr, key, REPLACE_VALUE);
	}
	
	/**
	 * 替换keys对应的value，替换值默认为******
	 * @param jsonStr
	 * @param keys
	 * @return
	 */
	public static String filterKeys(String jsonStr, String[] keys) {
		return filterKeys(jsonStr, keys, REPLACE_VALUE);
	}
	
}
